NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name E[-X]Hentai Helper // @namespace Crazycatz00 // @description Auto transfer fjords; Inter-site links; Sad Panda login; etc. // @icon data:image/gif;base64,R0lGODlhLAAwAPQfAHFxcJKSki4uLtLQ0P7+/uHi4ru7u1hYWEVFRfX19dKjpAgICKSiomRWV1RHSIqIh2hoZ0dURzg4ODEiIj4+PjxFOxsaG1NTU0U8RGJiYn+Af11dXU1NTSQkJOzs7JOSkyH5BAUAAB8ALAAAAAAsADAAAAX/4CeOZGl+2QYA2+m+8AdcUMAMg2FoR+y/FI2h4PEEOBeAYQD4OUcNhieRIBQ6FqxAw2w+YZeOgZAoEgwCiUDQEXu8XxOgswgQitSzZS2xcBIFTHEmCxYSHndVBFZqEnQMd4EQgyNrCwCJBDlLG3sWdlREBnBxFxYLD3dWdB1pFhaQZGUFBAGUIp12iAwLCBoPG1gDsrMFBaSDkLsLFxoAFBYai1ShAwkMtyJSiAMdCBQC0YvEmkMeGtkB1osIC8xj43kJSwXX2R+piO0GiuS1scYm3XpwYx4tRWUUATAEQdGDbELGaaKViQEdAaYwaWpB6QGiehNlEbiwoEMGCCgt/4xJgOwJgAcPNMYjoGEBBwAZMhwIBoEMtlsLJowxs4iXLwgZLiBAIAABGUG3ODAw8IBWAQPQAjw4oPRbmlAPswlAJYoJBAYQLnBYqkYALQ8/gaYic0ZAAA0XukpQ02GYh1HZFlCckkHCAwgH1u6lsEBAlUAtnWjoMM3DAAoZWCSmIAFcnUUeCqA7IfDFhgygEwSQAACxUs5jpY0zQuoAmzWRRVAARZgCYq4I9r4aJhEtCQsQOFAI80KA3wQDEHDYcAG4o14SFxnIMAKAgwcOGjww6QLBlCkBBGw4sDM4m8/ZC5QWQIFpgwZ7T29AiRRjJA8QqLfTBeC0YQFFEh0jAv8AAnAgQXCdYQZBazlBsEBPxgywFnsHFDjWAdmB5sUzF9DHlgDsbaDiTgtIM0ABDFCQIlOt0GFHiOcsKEFOGNS3Rl5qcSBkHdAdQ4GKNLZhY4h3hOWgAgM00FQaS1W51AIMGIPVBRlwoAUFHHCFInGzjfaBBAwo4MCDi1Hg5lKMZXkOAoW1gsABOa1nygLwLCLaCBLc96CbnHXmCBawzNNhBxJMlwKHHLaC0AC2iLBXU0spZ6iBp4zRTlN5QspeXhzARwADYX3g4Jv1feOIAxw0daGFO+q0k62icoAcXQAsUMEIjLLRSiPfYYAABIxZcBKkK56WQl4IWLCBdq2AA0OpoBl00EAA4CCw3np45lShTkJKsABqCZD0DQbXwiaBA5x14KizKOVJnWKXnLoAZxPEcOQawbmJEX8nQQDuvcphsUQbAvQbAxIOOCDdYuLytyISirFBEHdPbCCBAmoW6u1OKurZFWzylvbEBQ4MoAB+nMm44qhsSTABFr/eYgHIxsaMhFoIYMBXKxHcIwKjGGD0poPhMBpBD0aXUK2bbdUXNQyxrkHB1SKEAAA7 // @match *://*.e-hentai.org/* // @match *://exhentai.org/* // @version 2.2.3 // @grant none // @noframes // ==/UserScript== if (window.location.hash === '#exhCookieLog') { window.prompt("Make sure you are currently logged in!\nCode:", JSON.stringify(document.cookie.split(/;\s*/).filter(function(c){ return c.indexOf('ipb_') === 0; }))); } var appendHeadLink = function(){ var head, img; return function(txt, src){ if (!head) { if (!(head = document.getElementById('nb'))) { return null; } } if (!img) { img = (head.getElementsByTagName('img')[0] || {}).src; } var e; if (img) { e = head.appendChild(document.createElement('img')); e.alt = ''; e.src = img; head.appendChild(document.createTextNode(' ')); } e = head.appendChild(document.createElement('a')); e.href = src; e.textContent = txt; return e; }; }(), ehentai = function(){ // --- Add Ex link var head = document.getElementById('nb3'), e; if (head) { e = head.parentNode; e.style.display = 'inline-block'; e.style.width = head.style.width = 'auto'; e = head.insertBefore(document.createElement('div'), head.children[head.children.length - 1]); e.style.cssFloat = 'left'; e = e.appendChild(document.createElement('a')); e.href = '//exhentai.org/'; e = e.appendChild(document.createElement('img')); e.alt = 'ExHentai Galleries'; e.src = 'data:image/gif;base64,R0lGODdhcwAlAPUAAHRCD5tMCuHez1sODapYEaxqMKeihJlSBIBGBmc1BbuGUaxmKZtZFah9TXY7A1kyCalzOIQ9AahhHJ5lKpdcJG0pBJBFArJ1PZhMFbdrI4dVG7JoNZ5LAH1JGY9MAo9JDKNdNJxEAubk1amkht3ay9rXxqumiLWwk7Crjujg3bOukdXSweThzq6pjLmzmd/czdjVxM7Mt8S/qdPQv8zHs7y2nsjDrdDNur+7omA8Fq1yLp5eG7BuLlVAJIpPEMJ1QSwAAAAAcwAlAAAG/8CBcEgsGo/IpHLJbDqVhah0Sq1ar9isdsvtZg/gsHhMLpvP6LR6zUYH3vC4fE6v2+/4vH5/f/r/gIGCSiKFhoeIiYqLjI2Oj5CRjSmUlZaXmJmam5ydnp+gnCyjpKWmp6ipqqusra6vqwKys7S1tre4ubq7vL2+v8DBwsPExC/HyMnKy8zNzs/Q0dLTzyTW19jZ2tvc3d7f4OHi3iXl5ufo6err7O3u7/Dx7TD09fb3+Pn6+/z9/v8A+a0YSLCgwYMIEypcyLChw4cLZ0icSBFADoozcgDAKPGBxwQgE3To+CBkghwrZjzYyLFHj5Qcc5QM6WBkDpMgL6pEqXImSP8HLD+a1MCR4o2jSJMW8JDgaIwEHwokPZogAgMJBCjsmDAhhoMIFCDw2IEBg4UbDjBMpRpg7Y0HEQ4QuCoBAoQbHjhoxcDAAwIENwCcrRqAgGEJOnjE6IGAw47DIBq4RRqjsuXLMRogqBCjAoIGmCs72BFatATMPjjEQECgNADSoXP4iHGjNO3LcmNEUI2gQ23av3V/sE2chvHjyI1TiJDAwYTjETzmoJGAAA0EESw4+EvjA4PkCA5c/56cBgDyySt48GDhL/oHQAE4SADgAAQaFr5H8HAgQnYKx33AAQYIOPBVB+UlZ8OCDDa4oAYYgMAXg3RhYINgNnwQAAYehHD/gA0OEGBDdA/kEN6IHDi4oAMBqGgDAgGMRcBWDDoQwgILEJAXBQsi4MGIB0iww2MTNKiBBFcxgIAFGrjIoAxQRimlDKlJIIMEByAwJZQOHDClBgzIYAEBMlQYwAIyAPDBljI4sOaWDoTJJgATRAkCAVa26eUHGLDpJwd1+ikDDoQWaigFchVKwAE7GEroeh0UCAACH0iAQ1SOEpABDhSEYIFJHeCggV+g4vDGB9oBEAEAoVqwgaEMZIWDBQvg4IOHk34VAQI4zAfArxH4sEMDjjpaw7HIJqvAAsnWsIACzR4LwQUZ8LDBBRdAW0ADzW57LLU88FAABNzWMO0FC1x7/4G0OuiQgQ7jQuDsD81OoG25EFxbwAYLTFvDVToskEEB2UbbrAsIJ6zwwgw3vHANDkcsMcQSV2xxwxRHfMLGHHfs8ccghyzyyCSXbPLJI6ug8sost+zyyzDHLPPMNNdss8wo5Kzzzjz37PPPQAct9NBEFx10C0gnrfTSTDft9NNQRy311FRDbcLVWGet9dZcd+3112CHLfbYX49g9tlop6322my37fbbcMctt9sG1G333XjnrffefPft99+ABy744IQXbvjhhw+i+OKMN87H45BHLvnkd1hg+eWYZ6755px37vnnoIcuuucVlG766ainrvrqrLfu+uuwx95647TXbgR7EkEAADsK'; } }, gehentai = function(){ var exURL = '//exhentai.org' + window.location.pathname; // --- Redirect fjords if (document.title.indexOf('Gallery Not Available') !== -1) { window.gotonext = function(){}; window.stop(); window.location.replace(exURL + '?fjords'); return; } // --- Add Ex link appendHeadLink('ExHentai', exURL); }, exhentai = function(){ var e; // --- Sad Panda check if ((e = document.body.getElementsByTagName('img')).length === 1 && e[0].src === window.location.href) { exhentaiLogin(); return; } // --- Add GE link if not fjords if (window.location.search.search(/[?&]fjords(?:[&=]|$)/i) === -1) { appendHeadLink('E-Hentai', '//g.e-hentai.org' + window.location.pathname); } }, exhentaiLogin = function(){ var container = document.createElement('div'), cookieText = container.appendChild(document.createElement('input')), submit = container.appendChild(document.createElement('input')), getCode = container.appendChild(document.createElement('a')), onEnter = function(e){ if (e.which === 13 && !submit.disabled) { onSubmit(); } }, onSubmit = function(){ if (submit.disabled) { return; } submit.disabled = true; try { var cookies = JSON.parse(cookieText.value); if (typeof cookies === 'object' && cookies.length > 0) { for (var i = 0; i < cookies.length; ++i) { document.cookie = cookies[i].replace(/(?:;\s*path=\S+|$)/, '; path=/').replace(/(?:;\s*domain=\S+|$)/, '; domain=.' + window.location.hostname).replace(/(?:;\s*max-age=\S+|$)/, '; max-age=31536000'); } window.location.reload(); } } catch (e) { alert(e); submit.disabled = false; } }; container.style.textAlign = 'center'; cookieText.type = 'text'; cookieText.placeholder = 'Cookie Code'; submit.type = 'button'; submit.value = 'Login!'; getCode.href= 'http://forums.e-hentai.org/index.php?act=Login#exhCookieLog'; getCode.target = 'exhWindow'; getCode.textContent = 'Get Code'; getCode.style.cssText = '-moz-appearance: button; appearance: button; padding: 0 .2em; text-decoration: none; color: initial;'; cookieText.addEventListener('keydown', onEnter, false); submit.addEventListener('click', onSubmit, false); document.body.appendChild(container); }, general_viewer = function(){ // --- Auto-run the failed image code after 3 seconds var loadFailSTO, loadFailCheck = function(){ var img = document.getElementById('img'); if (img.naturalWidth === 0) { if (typeof window.si !== 'number') { window.si = 1; } if (typeof window.nl === 'function') { window.nl(window.si); } else { window.location.search += (window.location.search[0] === '?' ? '&' : '?') + 'nl=' + window.si; } } }, loadFail = function(){ // Don't run it again if we already have (viewer sets this for us) if (window.location.search.search(/[?&]nl=/i) === -1) { loadFailSTO = setTimeout(loadFailCheck, 2500); } }; loadFail(); // Also affect dynamically loaded pages var proto = Object.getPrototypeOf(window.history); proto.origReplaceState = proto.replaceState; proto.replaceState = function(data, title, url){ if (loadFailSTO) { clearTimeout(loadFailSTO); } window.history.origReplaceState(data, title, url); loadFail(); }; }; switch (window.location.host) { case 'e-hentai.org': ehentai(); break; case 'g.e-hentai.org': gehentai(); break; case 'exhentai.org': exhentai(); break; } if (window.location.pathname.indexOf('/s/') === 0) { general_viewer(); }